package com.bestcem.xm.award.service;

import com.bestcem.xm.award.grpc.service.param.draw.*;
import com.bestcem.xm.award.service.dto.FileInfoDTO;
import com.bestcem.xm.award.service.dto.draw.DrawAwardResultDTO;
import com.bestcem.xm.award.service.dto.draw.GetAwardDetailDTO;
import com.bestcem.xm.award.service.dto.draw.RecordDTO;
import com.bestcem.xm.award.service.dto.draw.RecordDetailDTO;
import com.bestcem.xm.common.core.domain.web.PageResultDTO;
import com.bestcem.xm.common.core.domain.web.ServiceResult;

/**
 * 抽奖相关服务
 *
 * @author hang.li <hang.li@idiaoyan.com>
 * @version v1.0
 * @date 2021/6/30 17:46
 */
public interface AwardDrawDisplayService {

    /**
     * 修改中奖状态
     *
     * @param param 修改中奖状态请求参数
     * @return 修改记录数
     */
    ServiceResult<Long> updateWinnerStatus(UpdateStatusParam param);

    /**
     * 保存中奖联系方式
     *
     * @param param 保存中奖联系方式请求参数
     * @return 修改记录数
     */
    ServiceResult<Long> saveWinnerMessage(SaveWinnerMessageParam param);

    /**
     * 获取短信验证码
     *
     * @param param 获取短信验证码请求参数
     * @return ServiceResult
     */
    ServiceResult getSmsAuthCode(GetSmsCodeParam param);

    /**
     * 短信验证码校验
     *
     * @param param 验证码验证请求参数
     * @return ServiceResult
     */
    ServiceResult verifySmsAuthCode(VerifySmsCodeParam param);

    /**
     * 中奖名单
     *
     * @param param 获取中奖名单请求参数
     * @return 中奖名单
     */
    ServiceResult<PageResultDTO<RecordDTO>> listWinners(GetWinnersParam param);

    /**
     * 中奖名单中的奖项信息
     *
     * @param param 请求参数
     * @return 中奖名单中的奖项信息
     */
    ServiceResult<PageResultDTO<RecordDetailDTO>> listWinnerDetails(ListWinnerDetailsParam param);

    /**
     * 导出中奖名单
     *
     * @param param 导出中奖名单请求参数
     * @return 文件信息
     */
    ServiceResult<FileInfoDTO> exportWinners(ExportWinnersParam param);

    /**
     * 导出中奖名单中的奖项信息
     *
     * @param param 导出中奖名单中的奖项信息请求参数
     * @return 文件信息
     */
    ServiceResult<FileInfoDTO> exportWinnerDetails(ExportWinnerDetailsParam param);

    /**
     * 获取抽奖详情
     *
     * @param param 获取抽奖详情请求参数
     * @return 奖励抽奖详情
     */
    ServiceResult<GetAwardDetailDTO> getAwardDetail(GetAwardDetailParam param);

    /**
     * 抽奖
     *
     * @param param 抽奖请求参数
     * @return 抽奖结果
     */
    ServiceResult<DrawAwardResultDTO> drawAward(DrawAwardParam param);
}
